using System;
using System.Collections.Generic;
using System.Text;
using DTO;
using DAO;
using System.Data;
using System.Security.Cryptography;
namespace BUS
{
    public enum NhanVienBUSResult
    {
        OK ,
        DAOERROR,
        PHAT_SINH_MA_LOI,
        DANG_NHAP_THAT_BAI
    }
    public class NhanVien
    {
        public static string GetMD5(string chuoi)
        {
            string str_md5 = "";
            byte[] mang = System.Text.Encoding.UTF8.GetBytes(chuoi);

            MD5CryptoServiceProvider my_md5 = new MD5CryptoServiceProvider();
            mang = my_md5.ComputeHash(mang);

            foreach (byte b in mang)
            {
                str_md5 += b.ToString("X2");
            }

            return str_md5;
        }
        public static NhanVienBUSResult Update(DTO.NhanVien nv)
        {
            nv.Password = GetMD5(nv.Password);
            string sql = "UPDATE NhanVien SET HoTen=N'" + nv.HoTen + "',DiaChi=N'" + nv.DiaChi + "',NgaySinh='" + nv.NgaySinh + "',DienThoai=N'" + nv.DienThoai + "',BangCap=N'" + nv.MaBangCap + "',BoPhan=N'" + nv.MaBoPhan + "',ChucVu=N'" + nv.MaChucVu +"',Password=N'"+nv.Password;
            sql += "' where MaNhanVien =N'" + nv.MaNhanVien + "'";
            DAO.Interface dao = new DAO.NhanVien();
            if (dao.Update(sql))
                return NhanVienBUSResult.OK;
            return NhanVienBUSResult.DAOERROR;
        }
        public static NhanVienBUSResult LoginFull(DTO.NhanVien nv)
        {
            string pw = GetMD5(nv.Password);
            string sql = "select * from NhanVien where MaNhanVien='" + nv.MaNhanVien + "' and Password='" + pw + "'";
            DAO.Interface dao = new DAO.NhanVien();
            DataTable dt = dao.Select(sql);
            if (dt != null)
            {
                if (dt.Rows.Count == 1)
                {
                    nv.HoTen = dt.Rows[0].ItemArray[1].ToString();
                    nv.DiaChi = dt.Rows[0].ItemArray[2].ToString();
                    nv.NgaySinh = Convert.ToDateTime(dt.Rows[0].ItemArray[3]);
                    nv.DienThoai = dt.Rows[0].ItemArray[4].ToString().Trim();
                    nv.MaBangCap = dt.Rows[0].ItemArray[5].ToString().Trim();
                    nv.MaBoPhan = dt.Rows[0].ItemArray[6].ToString().Trim();
                    nv.MaChucVu = dt.Rows[0].ItemArray[7].ToString().Trim();
                    nv.Password = dt.Rows[0].ItemArray[8].ToString().Trim();
                    return NhanVienBUSResult.OK;
                }
            }
            return NhanVienBUSResult.DANG_NHAP_THAT_BAI;
        }
        public static NhanVienBUSResult SelectAll(List<DTO.NhanVien> danhSach)
        {
            string sql = "select * from NhanVien";
            DAO.Interface dao = new DAO.NhanVien();
            DataTable dt = dao.Select(sql);
            if(dt!= null)
            {
                for(int i = 0 ; i<dt.Rows.Count;i++)
                {
                    DTO.NhanVien dto = new DTO.NhanVien();
                    dto.MaNhanVien = dt.Rows[i].ItemArray[0].ToString().Trim();
                    dto.HoTen = dt.Rows[i].ItemArray[1].ToString();
                    dto.DiaChi = dt.Rows[i].ItemArray[2].ToString();
                    dto.NgaySinh = Convert.ToDateTime(dt.Rows[i].ItemArray[3]);
                    dto.DienThoai = dt.Rows[i].ItemArray[4].ToString().Trim();
                    dto.MaBangCap = dt.Rows[i].ItemArray[5].ToString().Trim();
                    dto.MaBoPhan = dt.Rows[i].ItemArray[6].ToString().Trim();
                    dto.MaChucVu = dt.Rows[i].ItemArray[7].ToString().Trim();
                    dto.Password = dt.Rows[i].ItemArray[8].ToString().Trim();
                    danhSach.Add(dto);
                }
                return NhanVienBUSResult.OK;
            }
            return NhanVienBUSResult.DAOERROR;
        }
        public static NhanVienBUSResult SelectTQ(List<DTO.NhanVien> danhSach)
        {
            string sql = "select * from NhanVien where BoPhan ='TQ'";
            DAO.Interface dao = new DAO.NhanVien();
            DataTable dt = dao.Select(sql);
            if (dt != null)
            {
                for (int i = 0 ; i < dt.Rows.Count ; i++)
                {
                    DTO.NhanVien dto = new DTO.NhanVien();
                    dto.MaNhanVien = dt.Rows[i].ItemArray[0].ToString().Trim();
                    dto.HoTen = dt.Rows[i].ItemArray[1].ToString();
                    dto.DiaChi = dt.Rows[i].ItemArray[2].ToString();
                    dto.NgaySinh = Convert.ToDateTime(dt.Rows[i].ItemArray[3]);
                    dto.DienThoai = dt.Rows[i].ItemArray[4].ToString().Trim();
                    dto.MaBangCap = dt.Rows[i].ItemArray[5].ToString().Trim();
                    dto.MaBoPhan = dt.Rows[i].ItemArray[6].ToString().Trim();
                    dto.MaChucVu = dt.Rows[i].ItemArray[7].ToString().Trim();
                    dto.Password = dt.Rows[i].ItemArray[8].ToString().Trim();
                    danhSach.Add(dto);
                }
                return NhanVienBUSResult.OK;
            }
            return NhanVienBUSResult.DAOERROR;
        }
        public static NhanVienBUSResult SelectTT(List<DTO.NhanVien> danhSach)
        {
            string sql = "select * from NhanVien where BoPhan ='TT'";
            DAO.Interface dao = new DAO.NhanVien();
            DataTable dt = dao.Select(sql);
            if (dt != null)
            {
                for (int i = 0 ; i < dt.Rows.Count ; i++)
                {
                    DTO.NhanVien dto = new DTO.NhanVien();
                    dto.MaNhanVien = dt.Rows[i].ItemArray[0].ToString().Trim();
                    dto.HoTen = dt.Rows[i].ItemArray[1].ToString();
                    dto.DiaChi = dt.Rows[i].ItemArray[2].ToString();
                    dto.NgaySinh = Convert.ToDateTime(dt.Rows[i].ItemArray[3]);
                    dto.DienThoai = dt.Rows[i].ItemArray[4].ToString().Trim();
                    dto.MaBangCap = dt.Rows[i].ItemArray[5].ToString().Trim();
                    dto.MaBoPhan = dt.Rows[i].ItemArray[6].ToString().Trim();
                    dto.MaChucVu = dt.Rows[i].ItemArray[7].ToString().Trim();
                    dto.Password = dt.Rows[i].ItemArray[8].ToString().Trim();
                    danhSach.Add(dto);
                }
                return NhanVienBUSResult.OK;
            }
            return NhanVienBUSResult.DAOERROR;
        }
        public static NhanVienBUSResult SelectTK(List<DTO.NhanVien> danhSach)
        {
            string sql = "select * from NhanVien where BoPhan ='TK'";
            DAO.Interface dao = new DAO.NhanVien();
            DataTable dt = dao.Select(sql);
            if (dt != null)
            {
                for (int i = 0 ; i < dt.Rows.Count ; i++)
                {
                    DTO.NhanVien dto = new DTO.NhanVien();
                    dto.MaNhanVien = dt.Rows[i].ItemArray[0].ToString().Trim();
                    dto.HoTen = dt.Rows[i].ItemArray[1].ToString();
                    dto.DiaChi = dt.Rows[i].ItemArray[2].ToString();
                    dto.NgaySinh = Convert.ToDateTime(dt.Rows[i].ItemArray[3]);
                    dto.DienThoai = dt.Rows[i].ItemArray[4].ToString().Trim();
                    dto.MaBangCap = dt.Rows[i].ItemArray[5].ToString().Trim();
                    dto.MaBoPhan = dt.Rows[i].ItemArray[6].ToString().Trim();
                    dto.MaChucVu = dt.Rows[i].ItemArray[7].ToString().Trim();
                    dto.Password = dt.Rows[i].ItemArray[8].ToString().Trim();
                    danhSach.Add(dto);
                }
                return NhanVienBUSResult.OK;
            }
            return NhanVienBUSResult.DAOERROR;
        }
        public static NhanVienBUSResult PhatSinhMaNhanVien(DTO.NhanVien nv)
        {
            bool rs = DAO.NhanVien.PhatSinhMaNhanVien(nv);
            if (rs)
                return NhanVienBUSResult.OK;
            return NhanVienBUSResult.PHAT_SINH_MA_LOI;   
        }
        public static NhanVienBUSResult ThemNhanVien(DTO.NhanVien nv)
        {
            if (!DAO.NhanVien.ThemNhanVien(nv))
                return NhanVienBUSResult.DAOERROR;
            return NhanVienBUSResult.OK;
        }
        public static NhanVienBUSResult Login(DTO.NhanVien nv)
        {
            string sql = "select * from NhanVien";
            DAO.Interface dao = new DAO.NhanVien();
            DataTable dt = dao.Select(sql);
            for (int i = 0 ; i < dt.Rows.Count ; i++)
            {
                string ps = dt.Rows[i].ItemArray[8].ToString();
                string id = dt.Rows[i].ItemArray[0].ToString();
                while (ps.IndexOf(" ") >= 0)
                    ps = ps.Replace(" " , "");
                while (id.IndexOf(" ") >= 0)
                    id = id.Replace(" " , "");
                if (nv.Password == ps && nv.MaNhanVien == id)
                {
                    return NhanVienBUSResult.OK;
                }
            }
            return NhanVienBUSResult.DANG_NHAP_THAT_BAI;
        }
        public static DataTable Select(string sql)
        {
            DAO.NhanVien s = new DAO.NhanVien();
            return s.Select(sql);
        }
        public static bool Insert(string sql)
        {
            DAO.NhanVien s = new DAO.NhanVien();
            return s.Insert(sql);
        }
        public static bool Update(string sql)
        {
            DAO.NhanVien s = new DAO.NhanVien();
            return s.Update(sql);
        }
        public static bool Delete(string sql)
        {
            DAO.NhanVien s = new DAO.NhanVien();
            return s.Delete(sql);
        }

        public static string LayMaNhanVien(string tenNhanVien)
        {
            DAO.NhanVien nv = new DAO.NhanVien();
            return nv.LayMaNhanVien(tenNhanVien);
        }

        public static DataTable LayDanhSachNhanVien(string nameSP)
        {
            DAO.NhanVien nv = new DAO.NhanVien();
            return nv.LayDanhSachNhanVien(nameSP);
        }

        //Chi super star ....
        public static NhanVienBUSResult LayDanhSachNVTheoBoPhan(string TenBoPhan , List<DTO.NhanVien> danhsach)
        {
            DAO.NhanVien dao = new DAO.NhanVien();
            string sql = "SELECT * FROM NhanVien, BangCap, BoPhan, ChucVu";
            sql += " WHERE NhanVien.BoPhan = BoPhan.MaBoPhan";
            sql += " AND NhanVien.BangCap = BangCap.MaBangCap";
            sql += " AND NhanVien.ChucVu = ChucVu.MaChucVu";

            if (TenBoPhan != "")
                sql += " AND BoPhan.TenBoPhan = N'" + TenBoPhan + "'";
            DataTable dt = dao.Select(sql);
            if (dt != null)
            {
                foreach (DataRow row in dt.Rows)
                {
                    DTO.NhanVien b = new DTO.NhanVien();
                    b.MaNhanVien = row["MaNhanVien"].ToString();
                    b.HoTen = row["HoTen"].ToString();
                    b.DiaChi = row["DiaChi"].ToString();
                    b.NgaySinh = DateTime.Parse(row["NgaySinh"].ToString());
                    b.DienThoai = row["DienThoai"].ToString();

                    b.BangCapNhanVien = new DTO.BangCap();
                    b.BangCapNhanVien.MaBangCap = row["MaBangCap"].ToString();
                    b.BangCapNhanVien.TenBangCap = row["TenBangCap"].ToString();

                    b.BoPhanNhanVien = new DTO.BoPhan();
                    b.BoPhanNhanVien.MaBoPhan = row["MaBoPhan"].ToString();
                    b.BoPhanNhanVien.TenBoPhan = row["TenBoPhan"].ToString();

                    b.ChucVuNhanVien = new DTO.ChucVu();
                    b.ChucVuNhanVien.MaChucVu = row["MaChucVu"].ToString();
                    b.ChucVuNhanVien.TenChucVu = row["TenChucVu"].ToString();

                    danhsach.Add(b);
                }

                return NhanVienBUSResult.OK;
            }
            return NhanVienBUSResult.DAOERROR;
        }

    }
}
